// console.log(`加载form级别lczz ing👇`)
// alz={}
frappe.provide('alz')
frappe.ui.form.on("lczz", {
    onload(frm) {
        console.log(`lczz onload ing👇`)
        // 页面会缓存，会反复打开的页面，且需要变更的页面不能用
        // console.log(`frm 👉`, frm)
        // console.log(`frm.is_dirty() 👉`, frm.is_dirty())
        // alz={}
    },

    async refresh(frm) {
        console.log(`lczz refresh ing👇`)
        // console.log(`frm 👉`,frm)
        console.log(`frm.doc.当前负责角色 👉`,frm.doc.当前负责角色)
        console.log(`alz.流程单已修改 👉`, alz.流程单已修改)
        alz.单次执行已执行 = false
        // console.log(`frm.is_dirty() 👉`, frm.is_dirty())
        if (alz.流程单已修改) {
            alz.流程单已修改 = false
            console.log(`强制刷新页面 ing👇`)
            // frm.refresh();
            frm.reload_doc();
            return
        }
        // console.log(`frm 👉`, frm)
        let page = frm.page
        // console.log(`page 👉`, page)
        // console.log(`frm.fields_dict.状态.last_options 👉`, frm.fields_dict.状态.last_options)

        // let 状态组 = frm.fields_dict.状态.last_options
        // 状态组 = JSON.parse(状态组);
        // console.log(状态组);
        // let 当前状态 = frm.doc.状态

        // frappe.call({
        //     method: "lczz.utils.流程.cs",
        //     // method: "lczz.utils.流程.获取当前流程序号",
        //     args: {
        //         arg: "状态"
        //         },
        //     callback: function (response) {
        //         console.log(response);
        //     }
        // });

        // let res= await frm.call('获取当前流程序号')
        // console.log(`res 👉`,res)
        let res = await frm.call('获取状态信息')
        console.log(`获取状态信息 res 👉`, res)
        frm.状态信息 = res.message
        if (alz.立即执行下一步) {
            alz.立即执行下一步=false
            frm.events.下一步(frm)
        }

        let { 当前状态序号, 状态列表 } = frm.状态信息

        for (const [index, item] of 状态列表.entries()) {
            if (index >= 当前状态序号 - 3 && (index <= 当前状态序号 + 3)) {
                let label = item
                // let 点击按钮后执行 = () => { }
                // if (当前状态序号 == 0) {
                //     点击按钮后执行 = () => {
                //         frappe.msgprint({
                //             message: `请点击${bold("首款水单")}字段的上传按钮，上传 ${bold("首款水单")}`,
                //             title: "",
                //             indicator: "orange"
                //         });
                //     }
                // }

                // if (item == "待首款入账") {
                //     点击按钮后执行 = () => {
                //         frappe.confirm(
                //             "需要会计确认？……这一步先跳过",
                //             async () => {
                //                 await frm.call('前进一步')
                //                 frm.refresh();
                //             }
                //         );
                //     }
                // }
                // if (item == "待分派库存") {
                //     点击按钮后执行 = () => {
                //         frappe.confirm(
                //             "先跳过……",
                //             async () => {
                //                 await frm.call('前进一步')
                //                 frm.refresh();
                //             }
                //         );
                //     }
                // }
                // if (item == "待物料需求") {
                //     点击按钮后执行 = () => {
                //         console.log(`frappe 👉`, frappe)
                //         alz.id = frm.doc.name;
                //         alz.销售订单 = frm.doc.销售订单;
                //         frappe.new_doc('Material Request', {})
                //     }
                // }
                // if (item == "待采购下单") {
                //     点击按钮后执行 = async () => {
                //         alz.id = frm.doc.name;
                //         alz.物料需求单 = frm.doc.物料需求单;
                //         // console.log(`frm.doc.物料需求单 👉`, frm.doc.物料需求单)
                //         // let 物料doc = frappe.get_doc('Material Request', frm.doc.物料需求单)
                //         // console.log(`物料doc 👉`, 物料doc)
                //         console.log(`set_route之前 frm.is_dirty() 👉`, frm.is_dirty())

                //         frappe.set_route("Form", 'Material Request', alz.物料需求单);
                //         return
                //         let res = await frappe.db.get_doc('Material Request', frm.doc.物料需求单)
                //         console.log(`Material Request res 👉`, res)
                //         const items = res.items.map(item => {
                //             const 新item = {
                //                 item_code: item.item_code,
                //                 // uom: item.uom,
                //                 // item_name: item.item_name,
                //                 qty: item.qty,
                //                 schedule_date: item.schedule_date,
                //             }
                //             return 新item
                //         });
                //         res.items = items
                //         alz.物料需求单doc = res
                //         // let res =await frappe.get_doc('Material Request', frm.doc.物料需求单)
                //         frappe.new_doc('Purchase Order', {}).__run_link_triggers = true
                //     }
                // }

                // if (item == "待采购入库") {
                //     点击按钮后执行 = async () => {
                //         alz.id = frm.docname;
                //         // let res = frappe.call({
                //         //     method: "lczz.utils.a.发送通知",
                //         //     args: {
                //         //         doc_type: frm.doctype,
                //         //         doc_name: frm.docname,
                //         //         // allocated_to: frappe.session.user
                //         //         通知用户组: [frappe.session.user, 'ywy1@qq.com']
                //         //     }
                //         // });
                //         // console.log(`发送通知 res 👉`, res)
                //     }
                // }

                frm.add_custom_button(label, () => frm.events.下一步(frm))

                let 按钮类型 = 'secondary'
                if (index == 当前状态序号) {
                    按钮类型 = 'danger'
                }
                if (index < 当前状态序号) {
                    按钮类型 = 'success'
                }
                frm.change_custom_button_type(label, null, 按钮类型)

                if (index != 当前状态序号) {
                    let btn = page.inner_toolbar.find(`button[data-label="${encodeURIComponent(label)}"]`);
                    btn.prop("disabled", true);
                }

            }
        }

        let label = '看板↗'
        frm.add_custom_button(label, () => {
            frappe.set_route("/app/lczz/view/kanban/默认");
        })
        frm.change_custom_button_type(label, null, 'info')


        // label = '分派库存↗'
        // frm.add_custom_button(label, () => {
        // })
        // frm.change_custom_button_type(label, null, 'success')

        // label = '采购下单↗'
        // frm.add_custom_button(label, () => {
        //     frappe.new_doc('Purchase Order', {
        //         // 追踪id: frm.doc.name,
        //         // company: 'amtf',
        //         project: 'PROJ-0002',
        //     })
        // })
        // frm.change_custom_button_type(label, null, 'success')


    },

    // 上次图片的时候会自动触发save，需要处理
    async after_save(frm) {
        console.log(`after_save ing👇`)
        console.log(`frappe.session.自动创建lczzing 👉`, frappe.session.自动创建lczzing)
        let res = await frm.call('获取状态信息')
        let { 当前状态序号, 状态列表 } = res.message
        if (当前状态序号 == 0) {
            let 首款水单 = frm.doc.首款水单
            console.log(`首款水单 👉`, 首款水单)
            if (首款水单) {
                await frm.call('前进一步')
                frm.refresh();
            }
        }
    },
    async 下一步(frm) {
        console.log(`下一步 ing👇`)
        let { 当前状态序号, 状态列表 } = frm.状态信息
        
        if (当前状态序号 == 0) {
            frappe.msgprint({
                message: `请点击${bold("首款水单")}字段的上传按钮，上传 ${bold("首款水单")}`,
                title: "",
                indicator: "orange"
            });
            return
        }
        let item = 状态列表[当前状态序号]
        switch (true) {
            case item == "待首款入账":
                frappe.confirm(
                    "需要会计确认？……这一步先跳过",
                    async () => {
                        await frm.call('前进一步')
                        frm.refresh();
                    }
                );
                break;
            case item == "待分派库存":
                frappe.confirm(
                    "先跳过……",
                    async () => {
                        await frm.call('前进一步')
                        frm.refresh();
                    }
                );
                break;
            case item == "待物料需求":
                console.log(`frappe 👉`, frappe)
                alz.id = frm.doc.name;
                alz.销售订单 = frm.doc.销售订单;
                frappe.new_doc('Material Request', {})
                break;
            case item == "待采购下单":
                alz.id = frm.doc.name;
                alz.物料需求单 = frm.doc.物料需求单;
                // console.log(`frm.doc.物料需求单 👉`, frm.doc.物料需求单)
                // let 物料doc = frappe.get_doc('Material Request', frm.doc.物料需求单)
                // console.log(`物料doc 👉`, 物料doc)
                console.log(`set_route之前 frm.is_dirty() 👉`, frm.is_dirty())

                frappe.set_route("Form", 'Material Request', alz.物料需求单);
                return
                let res = await frappe.db.get_doc('Material Request', frm.doc.物料需求单)
                console.log(`Material Request res 👉`, res)
                const items = res.items.map(item => {
                    const 新item = {
                        item_code: item.item_code,
                        // uom: item.uom,
                        // item_name: item.item_name,
                        qty: item.qty,
                        schedule_date: item.schedule_date,
                    }
                    return 新item
                });
                res.items = items
                alz.物料需求单doc = res
                // let res =await frappe.get_doc('Material Request', frm.doc.物料需求单)
                frappe.new_doc('Purchase Order', {}).__run_link_triggers = true
                break;
            case item == "待采购入库":
                console.log(`frappe 👉`, frappe)
                frappe.confirm(
                    "待续……",
                    async () => {
                        // await frm.call('前进一步')
                        // frm.refresh();
                    }
                );
                break;
            default:
                break;
        }

        // if (item == "待首款入账") {
        //     frappe.confirm(
        //         "需要会计确认？……这一步先跳过",
        //         async () => {
        //             await frm.call('前进一步')
        //             frm.refresh();
        //         }
        //     );
        // }
        // if (item == "待分派库存") {
        //     frappe.confirm(
        //         "先跳过……",
        //         async () => {
        //             await frm.call('前进一步')
        //             frm.refresh();
        //         }
        //     );
        // }
        // if (item == "待物料需求") {
        //     console.log(`frappe 👉`, frappe)
        //     alz.id = frm.doc.name;
        //     alz.销售订单 = frm.doc.销售订单;
        //     frappe.new_doc('Material Request', {})
        // }
        // if (item == "待采购下单") {
        //     alz.id = frm.doc.name;
        //     alz.物料需求单 = frm.doc.物料需求单;
        //     // console.log(`frm.doc.物料需求单 👉`, frm.doc.物料需求单)
        //     // let 物料doc = frappe.get_doc('Material Request', frm.doc.物料需求单)
        //     // console.log(`物料doc 👉`, 物料doc)
        //     console.log(`set_route之前 frm.is_dirty() 👉`, frm.is_dirty())

        //     frappe.set_route("Form", 'Material Request', alz.物料需求单);
        //     return
        //     let res = await frappe.db.get_doc('Material Request', frm.doc.物料需求单)
        //     console.log(`Material Request res 👉`, res)
        //     const items = res.items.map(item => {
        //         const 新item = {
        //             item_code: item.item_code,
        //             // uom: item.uom,
        //             // item_name: item.item_name,
        //             qty: item.qty,
        //             schedule_date: item.schedule_date,
        //         }
        //         return 新item
        //     });
        //     res.items = items
        //     alz.物料需求单doc = res
        //     // let res =await frappe.get_doc('Material Request', frm.doc.物料需求单)
        //     frappe.new_doc('Purchase Order', {}).__run_link_triggers = true
        // }

        // if (item == "待采购入库") {
        //     alz.id = frm.docname;
        //     // let res = frappe.call({
        //     //     method: "lczz.utils.a.发送通知",
        //     //     args: {
        //     //         doc_type: frm.doctype,
        //     //         doc_name: frm.docname,
        //     //         // allocated_to: frappe.session.user
        //     //         通知用户组: [frappe.session.user, 'ywy1@qq.com']
        //     //     }
        //     // });
        //     // console.log(`发送通知 res 👉`, res)
        // }
    },
});

// console.log(`Purchase Order ing👇`)
frappe.ui.form.on("Purchase Order", {
    onload(frm) {
        // console.log(`Purchase Order onload ing👇`)
    },
    refresh(frm) {
        // console.log(`Purchase Order refresh ing👇`)
        // console.log(`frm.doc 👉`, frm.doc)
        // // console.log(`Material Request frm 👉`, frm)
        // console.log(`alz.id 👉`, alz.id)
    },

    async on_submit(frm) {
        console.log(`采购单 on_submit ing👇`)
        frappe.call({
            method: "lczz.utils.a.更新lczz",
            args: {
                id: alz.id,
                采购单: frm.doc.name
            }
        });
        alz.物料需求单 = ''
        alz.流程单已修改 = true
    },
});

frappe.ui.form.on("Material Request", {
    onload(frm) {
        console.log(`Material Request onload ing👇`)
        // if (alz.销售订单) {
        //     erpnext.utils.map_current_doc({
        //         method: "erpnext.selling.doctype.sales_order.sales_order.make_material_request",
        //         source_doctype: "Sales Order",
        //         target: frm,
        //         setters: {
        //             customer: frm.doc.customer || undefined,
        //             delivery_date: undefined,
        //         },
        //         get_query_filters: {
        //             docstatus: 1,
        //             status: ["not in", ["Closed", "On Hold"]],
        //             per_delivered: ["<", 99.99],
        //             // company: frm.doc.company,
        //             name: alz.销售订单,
        //         },
        //     });
        // }
        // if (alz.物料需求单) {
        //     frm.events.make_purchase_order(frm)
        // }
    },

    refresh(frm) {
        console.log(`Material Request refresh ing👇`)
        console.log(`alz.销售订单 👉`, alz.销售订单)
        if (alz.销售订单 && !alz.单次执行已执行) {
            erpnext.utils.map_current_doc({
                method: "erpnext.selling.doctype.sales_order.sales_order.make_material_request",
                source_doctype: "Sales Order",
                target: frm,
                setters: {
                    customer: frm.doc.customer || undefined,
                    delivery_date: undefined,
                },
                get_query_filters: {
                    docstatus: 1,
                    status: ["not in", ["Closed", "On Hold"]],
                    per_delivered: ["<", 99.99],
                    // company: frm.doc.company,
                    name: alz.销售订单,
                },
            });
            alz.单次执行已执行 = true
        }
        if (alz.物料需求单) {
            frm.events.make_purchase_order(frm)
        }
    },

    async on_submit(frm) {
        // console.log(`物料需求单 on_submit ing👇`)
        if (alz) {
            frappe.call({
                method: "lczz.utils.a.更新lczz",
                args: {
                    id: alz.id,
                    物料需求单: frm.doc.name
                }
            });
            alz.流程单已修改 = true
            alz.销售订单 = ''
        }
    },
});

function bold(s) {
    return `<strong>${s}</strong>`
}

function 发送通知(frm) {
    alz.id = frm.docname;
    let res = frappe.call({
        method: "lczz.utils.a.发送通知",
        args: {
            doc_type: frm.doctype,
            doc_name: frm.docname,
            // allocated_to: frappe.session.user
            通知用户组: [frappe.session.user, 'ywy1@qq.com']
        }
    });
    console.log(`发送通知 res 👉`, res)
}